package com.ruoyi.system.service.impl;

import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.domain.Uservo;
import com.ruoyi.system.mapper.UserMapper;
import com.ruoyi.system.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.xml.crypto.Data;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Service
public class IUserServiceImpl implements IUserService {


    @Autowired
    private UserMapper userMapper;


    @Override
    public List<Uservo> selectUserList(Uservo uservo) {
        // 角色id
        Long roleId = null;

        //取出 年月
        String assessDate = uservo.getAssessDate();
        String[] split = assessDate.split("-");
        String year = split[0];
        String month = split[1];

          // 登录存进去的信息
        LoginUser loginUser = SecurityUtils.getLoginUser();
        // 取出用户的id
        Long userId = loginUser.getUserId();
        // 取出部门的id
        Long deptId = loginUser.getDeptId();
        // 取出 role 看是否是高层管理 还是 中层管理员
        List<SysRole> roles = loginUser.getUser().getRoles();
        // 先判断 这个 角色集合是否为空
        if (roles != null && !roles.isEmpty()) {
            // 确保 roles 列表至少有一个元素
            if (!roles.isEmpty()) {
                roleId = roles.get(0).getRoleId();
            } else {
                // 处理没有角色的情况，可以根据业务需求进行调整
                throw new IllegalStateException("用户没有分配角色");
            }
        } else {
            // 处理没有角色的情况，可以根据业务需求进行调整
            throw new IllegalStateException("用户没有分配角色");
        }
        // 102 是 高层管理员   101 是 中层 管理员    高层管理给中层     中层给他部门的成员
        List<Uservo> uservos = null;
        if (roleId != null) {
            //高层管理员评价 中层管理员
            if (roleId == 102 ) {
                uservos  = userMapper.selectUserListbyTimeg(month , year ,userId,101L, uservo.getNickName(),uservo.getStatus());
            // 中层管理员评价基层员工/ 中层互评  // 要根据部门id查询 他所在部门的所有成员 / 中层
            } else if (roleId == 101) {
                // 前端传过来的 101 是  中层   查看  中层评价员工
                if (uservo.getRoleId() == 100){
                    uservos = userMapper.selectUserListByTimez(month , year  , userId,deptId, 100L, uservo.getNickName(),uservo.getStatus(),userId);
                // 前端传过来的 101 是  中层   查看  中层互评
                }else if (uservo.getRoleId() == 101){
                    long deptId1 = 1;
                    // 要根据部门id查询 他所在部门的所有成员
                    uservos = userMapper.selectUserListByTimez(month , year  , userId,deptId1, 101L, uservo.getNickName(),uservo.getStatus(),userId);
                }
            // 基层员工    查看他所在部门的领导
            }else if (roleId==100){  //基层员工查看
                List<Long> deptIds = userMapper.selectUserListbyTimed1(deptId,101L);
                uservos  = userMapper.selectUserListbyTimed(month , year , userId,101L, deptId ,uservo.getNickName(),uservo.getStatus(),deptIds);
            }
            //1 是超级管理员    超级管理员查看的 高层 中层 基层
            else if (roleId == 1 || roleId == 2){
                if (uservo.getRoleId()==102  || uservo.getRoleId()==101){
                        uservos  = userMapper.selectUserListbyTimeg(month , year , userId,101L, uservo.getNickName(),uservo.getStatus());
                }else if ( uservo.getRoleId()==100){
                    uservos = userMapper.selectUserListByTimez(month , year, userId  , roleId, 100L, uservo.getNickName(),uservo.getStatus(),userId);
                }
            }
        }
        return uservos;
       }


       //查询评分状态
    @Override
    public List<Uservo> selectType(Uservo uservo) {

        //取出 年月
        String assessDate = uservo.getAssessDate();
        String[] split = assessDate.split("-");
        String year = split[0];
        String month = split[1];

        // 取出用户的id
        Long userId = uservo.getUserId();
        // 取出部门的id
        Long deptId = uservo.getDeptId();
        //取出角色id
        Long roleId = uservo.getRoleId();

        // 先判断 这个 角色集合是否为空
        if (roleId == null) {
            throw new IllegalStateException("用户没有分配角色");
        }
        // 102 是 高层管理员   101 是 中层 管理员    高层管理给中层     中层给他部门的成员
        else {
            List<Uservo> uservos = null;
            //高层管理员评价 中层管理员
            if (roleId == 102 ) {
                uservos  = userMapper.selectUserListbyTimeg(month , year ,userId,101L, uservo.getNickName(),uservo.getStatus());
                // 中层管理员评价基层员工/ 中层互评  // 要根据部门id查询 他所在部门的所有成员 / 中层
            } else if (roleId == 101) {
                // 前端传过来的 101 是  中层   查看  中层评价员工
                List<Uservo> uservos1 = userMapper.selectUserListByTimez(month, year, userId, deptId, 100L, uservo.getNickName(), uservo.getStatus(), userId);
                // 前端传过来的 101 是  中层   查看  中层互评
                    long deptId1 = 1;
                    // 要根据部门id查询 他所在部门的所有成员
                List<Uservo> uservos2 = userMapper.selectUserListByTimez(month, year, userId, deptId1, 101L, uservo.getNickName(), uservo.getStatus(), userId);
                uservos = new ArrayList<>();
                uservos.addAll(uservos1);
                uservos.addAll(uservos2);
                // 基层员工    查看他所在部门的领导
            }else if (roleId==100){  //基层员工查看
                List<Long> deptIds = userMapper.selectUserListbyTimed1(deptId,101L);
                uservos  = userMapper.selectUserListbyTimed(month , year , userId,101L, deptId ,uservo.getNickName(),uservo.getStatus(),deptIds);
            }
            //1 是超级管理员    超级管理员查看的 高层 中层 基层
            else if (roleId == 1 || roleId == 2){
                if (uservo.getRoleId()==102  || uservo.getRoleId()==101){
                    uservos  = userMapper.selectUserListbyTimeg(month , year , userId,101L, uservo.getNickName(),uservo.getStatus());
                }else if ( uservo.getRoleId()==100){
                    uservos = userMapper.selectUserListByTimez(month , year, userId  , roleId, 100L, uservo.getNickName(),uservo.getStatus(),userId);
                }
            }
            return uservos;
        }
    }
}

